/*
 Copyright (c) [Year] [name of copyright holder]
 [Software Name] is licensed under Mulan PSL v2.
 You can use this software according to the terms and conditions of the Mulan
 PSL v2.
 You may obtain a copy of Mulan PSL v2 at:
          http://license.coscl.org.cn/MulanPSL2
 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
 KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
 NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 See the Mulan PSL v2 for more details.
*/

// #ifndef _1988WJ_PASTETHREADPOOL_HPP_
// #define _1988WJ_PASTETHREADPOOL_HPP_

// #include <condition_variable>
// #include <functional>
// #include <future>
// #include <mutex>
// #include <queue>
// #include <thread>
// #include <vector>

// class PasteThreadPool {
//   private:
//     std::vector<std::thread> _workers;        // 工作线程
//     std::queue<std::function<void()>> _tasks; // 任务队列

//     // 同步
//     std::mutex _queue_mutex;            // 队列互斥锁
//     std::condition_variable _condition; // 条件变量
//     bool _stop = false;                 // 停止标志

//   public:
//     // 构造函数：初始化线程池并启动指定数量的工作线程
//     explicit PasteThreadPool(size_t numThreads);
//     // 线程池析构函数
//     ~PasteThreadPool();

//     /**
//      * @brief 在线程池中排队一个任务以供以后执行
//      *
//      * @tparam F 要排队的任务的类型
//      * @tparam Args 任务的参数类型
//      * @param f 要排队的任务
//      * @param args 任务的参数
//      * @return 返回任务的结果的future
//      *
//      * 此函数通过创建一个packaged_task来包装传入的任务f和其参数args，然后将该任务添加到线程池的任务队列中
//      * 它还通过get_future方法返回一个future对象，该future对象可以用来获取任务的执行结果
//      *
//      * 注意：该函数使用了右值引用和std::forward来完美转发任务和参数，以确保高效的内存管理和性能
//      */
//     template <typename F, typename... Args>
//     auto enqueue(F &&f, Args &&...args) -> std::future<typename std::invoke_result_t<F, Args...>::type>;
// };
// #endif